home *** CD-ROM | disk | FTP | other *** search
- #!/bin/csh -fb
- # (The "-fb" might need to be changed to "-f" on some systems)
- #
- # Mailserver -- a simple MIME mailserver script.
- # Makes all files under a tree available for MIME-based retrieval.
- # By default, it sends them as the MIME type "application/octet-stream"
- # However, for a file named "x/y/foo.bar", you can specify a "right"
- # MIME content-type by putting it in the file "x/y/foo.bar.ct".
-
- # In a distributed sendmail environment, this script can be installed with lines
- # somewhat like the following two in /usr/lib/aliases:
- # mail-server: local-mail-server@some-single-machine
- # local-mail-server: "|/full/path/to/mailserver"
-
- # By default the program uses "mail-server" as its local return address.
- # and makes available all files under /usr/spool/ftp.
- # You might need or want to change the following parameters:
- set LOCALADDR=mail-server
- set ROOTDIR=/usr/spool/ftp
- set MAINTAINER=postmaster
- set METAMAILDIR=/usr/local/bin
- set LOGADDR=andrew@thumper.bellcore.com
- # If LOGADDR is the empty string, no logging is done.
- #
- # The real program begins here.
-
- setenv PATH ${METAMAILDIR}:${PATH}
- rehash
- set FromName=""
- set Subject=""
- set TmpFile=/tmp/ms.$$
- set FOORAW=$<
- while ("$FOORAW" != "")
- set FOO=(` echo "$FOORAW" | tr "[" "x"`)
- set BAR=($FOO)
- set BARLC=(`echo $FOO | tr A-Z a-z`)
- if ($BARLC[1] == "from:") then
- if ("$FromName" == "") then
- set FromName = ($BAR[2-])
- endif
- else if ($BARLC[1] == "reply-to:") then
- set FromName = ($BAR[2-])
- else if ($BARLC[1] == "subject:") then
- set Subject = ($BAR[2-])
- endif
- set FOORAW=$<
- end
- # Now, stdin just has the body left, to do with as we please.
- # We choose to interpret the first line as the request, nothing more
- if ("$Subject" == "") then
- set Subject=$<
- endif
-
- if ("$FromName" == "") then
- cat > $TmpFile <<!
- From: $LOCALADDR@`hostname`
- To: $MAINTAINER
- Subject: $Subject
-
- The metamail mailserver script, installed locally as $LOCALADDR, has received a request without any reply address.
-
- It is possible that this is the result of a user running the "mailserver"
- program by hand. It is intended to be run as an automated recipient of
- mail requests, rather than an interactive program.
-
- No reply is being generated, but the contents of the request are
- reproduced below. If no message appears below, then this program was
- probably run in some circumstance other than mail delivery.
- --------------------
- !
- cat $TmpFile - | /usr/lib/sendmail $MAINTAINER
- # Takes the rest of the message from standard input
- rm $TmpFile
- exit 0
- endif
-
- set danger=`echo $Subject | fgrep ..`
- if ($danger != "") then
- cat > $TmpFile <<!
- From: $LOCALADDR@`hostname`
- To: $FromName
- Subject: Re: $Subject
-
- For security reasons, this mailserver automatically rejects all requests
- that contain ".." in the path name.
-
- The file you requested, if it exists, will not be sent to you.
- !
- /usr/lib/sendmail -t < $TmpFile
- rm $TmpFile
- exit 0
- endif
-
- cd $ROOTDIR
- if (! -e "$Subject") then
- cat > $TmpFile <<!
- From: $LOCALADDR@`hostname`
- To: $FromName
- Subject: Re: $Subject
-
- You recently sent mail to this mail-server requesting the file:
- $Subject
-
- That file does not exist, so your request could not be met.
-
- Here is a list of the currently available files:
- --------------------------------
- !
- ls -R >> $TmpFile
- /usr/lib/sendmail -t < $TmpFile
- rm $TmpFile
- exit 0
- endif
-
- if (-e ${Subject}.ct) then
- set ct=`cat ${Subject}.ct`
- else
- set ct="application/octet-stream"
- endif
-
- metasend -b -t "$FromName" -f "$Subject" -m "$ct" -s "Re: $Subject"
- if ($status != 0) then
- cat > $TmpFile <<!
- From: $LOCALADDR@`hostname`
- To: $FromName
- Subject: Re: $Subject
-
- You recently sent mail to this mail-server requestion the file:
- $Subject
-
- An unanticipated error apparently precluded delivery of the file.
- Please accept our apologies.
-
- Command failed:
- metasend -b -t "$FromName" -f "$Subject" -m "$ct" -s "Re: $Subject"
-
- !
- /usr/lib/sendmail -t < $TmpFile
- rm $TmpFile
- exit 0
- endif
-
- if ("$LOGADDR" != "") then
- /usr/lib/sendmail -t <<!
- From: ${LOCALADDR}@`hostname`
- To: $LOGADDR
- Subject: Autosend delivery report
-
- The file: $Subject
- was sent to: $FromName
- !
- exit 0
-